Projet Zuul de conception orientée objet en Java d'un jeu d'aventure
Forum des exercices du projet Zuul
Exercice 7.10
- Être capable d'expliquer en détail comment fonctionne la méthode
getExitString
(voir Code 7.7 dans le livre).
- OPTIONNEL :Écrire ces explications dans le rapport.
Bonjour, j'aurais voulu plus de détail sur ces 2 lignes de code:
Set<String> keys=exits.keySet();
for(String exit:keys)
Pour moi la seconde ligne est une condition qui va tester toutes les clés contenues dans keys et les stocker en tant que String dans exit et la première ligne corespond à l'obtention de cette liste de clés qu'on met dans keys; seulement je ne comprends pas la partie Set<String>, je sais qu'il y a un rapport avec exit dans la condition mais ensuite je n'arrive pas à l'expliquer corectement.
La première ligne :
Set<Type_des_clés> ma_variable = ma_HashMap.keySet();
met dans ma_variable l'ensemble des clés de ma_HashMap (Set veut dire ensemble et fait partie des collections en Java).
La deuxième ligne :
for ( Type_des_éléments nom_d_un_élément : conteneur_de_données ) { instructions }
n'est pas une condition mais une boucle (appelée boucle for each), comme la boucle for avec les deux points-virgules, mais sans avoir besoin d'un compteur de boucle. conteneur_de_données peut être soit un tableau soit une collection de données, telle qu'un ensemble (mais il existe aussi des listes, des piles, ...). A chaque tour de boucle, nom_d_un_élément vaudra l'élément suivant dans le conteneur de données ; quand tous les éléments ont été ainsi parcourus, la boucle s'arrête.
Un étudiant a écrit :
String returnString = "sorties:";
Set<String> keys = exits.keySet();
for ( String exit : keys )
returnString += " " + exit;
return returnString;
3) qu'est ce que le = dans le returnString? un simple caractère =? pourquoi "exit" ne prends pas de s à la fin du code alors qu'il en a un dans "exits.keySet()"? cela ne risque pas de créer des confusions avec les adresses?
1)
La variable keys doit être déclarée pour recevoir ce que retourne exits.keySet(), c'est-à-dire l'ensemble des clés de la HashMap exits. Set est la classe ensemble, mais de quel type sont les clés ? exits ayant été déclarée HashMap<String,Room>, les clés sont donc de type String, donc nous obtiendrons un ensemble de String qui se déclare par Set<String>.
2)
Il ne s'agit pas ici d'une boucle for classique, mais de ce qu'on appelle une boucle for each (POUR CHAQUE) qui permet de parcourir facilement tous les éléments d'un tableau ou d'une collection (telle qu'un ensemble). Lisez mes explications dans ma réponse à la question précédente (au-dessus de la vôtre).
3)
X += Y; est une forme raccourcie de X = X+Y;
La variable exit (qui est une String) n'a rien à voir avec la variable exits (qui est une HashMap<String,Room>), si ce n'est qu'en parcourant l'ensemble des clés de exits, on obtient bien une exit à chaque tour de boucle.
Réseaux sociaux